/**
 * Copyright (c) 2018 软唐 All rights reserved.
 * <p>
 * https://www.softtown.cn
 * <p>
 * 版权所有，侵权必究！
 */

package com.softtown.modules.sys.dao;

import com.softtown.common.dao.BaseDao;

import com.softtown.modules.sys.entity.SysMenuEntity;
import io.swagger.models.auth.In;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.security.core.parameters.P;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * 菜单管理
 *
 * @author Ding Ya Yong
 */
@Mapper
@Component(value = "SysMenuDao")
public interface SysMenuDao extends BaseDao<SysMenuEntity> {

    SysMenuEntity getById(@Param("id") Long id, @Param("language") String language);

    /**
     * 查询所有菜单列表
     *
     * @param type 菜单类型
     * @param language 语言
     */
    List<SysMenuEntity> getMenuList(@Param("type") Integer type, @Param("language") String language);

    /**
     * 查询用户菜单列表
     *
     * @param userId 用户ＩＤ
     * @param type 菜单类型
     * @param language 语言
     */
    List<SysMenuEntity> getUserMenuList(@Param("userId") Long userId, @Param("type") Integer type, @Param("language") String language, @Param("list") List<Long> roleIds);

    /**
     * 查询用户权限列表
     * @param userId  用户ID
     */
    List<String> getUserPermissionsList(Long userId);

    /**
     * 查询管理员权限列表
     * @param compId  用户ID
     */
    List<String> getAdminPermissionsList(Long compId);

    /**
     * 查询所有权限列表
     */
    List<String> getPermissionsList();

    /**
     * 根据父菜单，查询子菜单
     * @param pid  父菜单ID
     */
    List<SysMenuEntity> getListPid(Long pid);

    /**
     * 通过ids获取menu信息
     * @param  ids
     * @param  typeId
     *  @param language
     * @return SysMenuEntity
     * @author Dingyayong
     * @date 2019-06-25 11:26
     */
    List<SysMenuEntity> selectListByIds(@Param("list") List<Long> ids, @Param("typeId") Integer typeId, @Param("language") String language);

    /**
     * 获取游客的菜单
     * @param  compId
     * @param  roleIds
     * @param language
     * @param type
     * @return List<SysMenuEntity>
     * @author Dingyayong
     * @date 2019-06-25 18:06
     */
    List<SysMenuEntity> getUserCompMenuList(@Param("compId") Long compId, @Param("list") List<Long> roleIds, @Param("type") Integer type, @Param("language") String language);

    /**
     * 根据公司id获取菜单列表
     * @param compId
     * @param type
     * @param language
     * @return List<SysMenuEntity>
     * @author Dingyayong
     * @date 2019-07-02 11:57
     */
    List<SysMenuEntity> getMenuListByCompanyId(@Param("type") Integer type, @Param("compId") Long compId, @Param("language") String language);

    /**
     * 查询所有菜单列表
     *
     * @param type 菜单类型
     * @param language 语言
     */
    List<SysMenuEntity> getRoleMenuList(@Param("type") Integer type, @Param("compId") Long compId, @Param("language") String language);


    /**
     * @Author: Ding Ya Yong
     * @Description: 获取app主要菜单
     * @Date: 2021/12/22 22:30
     * @Param: [type, compId, language]
     * @return: java.util.List<com.softtown.modules.sys.entity.SysMenuEntity>
     **/
    List<SysMenuEntity> getAppMainMenuList(@Param("type") Integer type, @Param("compId") Long compId, @Param("language") String language);


    /**
     * @Author: Ding Ya Yong
     * @Description: 获取app角色对应的菜单
     * @Date: 2021/12/22 22:32
     * @Param: [compId, roleIds, type, language]
     * @return: java.util.List<com.softtown.modules.sys.entity.SysMenuEntity>
     **/
    List<SysMenuEntity> getAppMainMenuList(@Param("compId") Long compId, @Param("list") List<Long> roleIds, @Param("type") Integer type, @Param("language") String language);

}
